package day8;

import java.util.Scanner;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

//实现Callable接口 实现call()
public class TestCallable implements Callable<Integer>{
    String str;
    public TestCallable(String str){
        this.str=str;
    }
    //返回值:线程执行结束了 最后返回的一个结果
    //有一个字符串  想统计 字母a的个数
    //call():类似于run()都是表示线程执行逻辑
    //只不过她可以抛异常 可以有返回值
    public Integer call() throws Exception {
        int num=0;
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)=='a'){
                num++;
                Thread.sleep(1000);
                System.out.println("统计到了a:"+num);
            }
        }
        return num;
    }
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        Scanner sc=new Scanner(System.in);
        String str=sc.nextLine();
        TestCallable test=new TestCallable(str);
        //Callable和Thread没有关系 不能直接使用
        //只能通过FutureTask属于Runnable类型间接使用线程
        FutureTask<Integer> ft=new FutureTask(test);
        Thread t=new Thread(ft);

        t.start();
        //ft.get()用于接收call方法的返回值
        //它会阻塞线程 需要等待call执行结束才会有返回值
        Integer result=ft.get();
        System.out.println("计算的结果是:"+result);
    }
}
